/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Services;

import Bean.Respuesta;
import Bean.Views.DragDropView;
import Bean.Views.Ejercicio;
import Bean.Views.PreguntaView;
import Bean.Views.SintaxisView;
import Util.Constantes;
import java.util.ArrayList;

/**
 *
 * @author Manuel Lap
 */
public class Calificador {

    private int numPreguntas;

    private int numAciertosDrag;

    private int numErroresDrag;

    private int numAciertosSintaxis;

    private int numErroresSintaxis;

    private int numAciertosPreguntas;

    private int numErroresPreguntas;

    private int numAciertos;

    private int numErrores;

    public Calificador(){
        this.numErrores = 0;
        this.numAciertos = 0;
        this.numAciertosDrag = 0;
        this.numAciertosPreguntas = 0;
        this.numAciertosSintaxis = 0;
        this.numErroresDrag = 0;
        this.numErroresPreguntas = 0;
        this.numErroresSintaxis = 0;
        this.numPreguntas = Constantes.NUMERO_EJERCICIOS;
    }

    public int calificar(ArrayList<Ejercicio> preguntas, ArrayList<String> respuestas){

        for(int numEjer = 0; numEjer < preguntas.size(); numEjer++){
            if(preguntas.get(numEjer).getTipo() == Constantes.DRAG_DROP) checkDragDrop(((DragDropView)preguntas.get(numEjer)),respuestas.get(numEjer));
            else if(preguntas.get(numEjer).getTipo() == Constantes.SINTAXIS) checkSintaxis(((SintaxisView)preguntas.get(numEjer)),respuestas.get(numEjer));
            else if(preguntas.get(numEjer).getTipo() == Constantes.PREGUNTAS) checkPreguntas((ArrayList<Respuesta>) ((PreguntaView)preguntas.get(numEjer)).getRespuestas(),respuestas.get(numEjer));
        }

        return getNumAciertos();
    }

    private void checkDragDrop(DragDropView drag, String respUser){
        if(drag.getCodigoCorrecto().compareTo(respUser) == 0){
            numAciertos++;
            numAciertosDrag++;
        }
        else{
            setNumErrores(getNumErrores() + 1);
        }
    }

    private void checkSintaxis(SintaxisView sintaxis, String respUser){
        //METODO OSVALDO
        Sintaxis sin = new Sintaxis();
        if(sin.revisarSintaxis(sintaxis.getCodigoCorrecto(), respUser)){
            numAciertos++;
            numAciertosSintaxis++;
        }
        else{
            numErrores++;
        }
    }

    private void checkPreguntas(ArrayList<Respuesta> respuestas, String respUsr){
        String respCorrecta = "";
        for(int i = 0; i < respuestas.size(); i++){
            if(respuestas.get(i).isCorrecta() == 1){
                respCorrecta = respuestas.get(i).getRespuesta();
            }
        }
        if(respCorrecta.compareTo(respUsr) == 0){
            numAciertos++;
            numAciertosPreguntas++;
        }
        else setNumErrores(getNumErrores() + 1);
    }

    /**
     * @return the numPreguntas
     */
    public int getNumPreguntas() {
        return numPreguntas;
    }

    /**
     * @param numPreguntas the numPreguntas to set
     */
    public void setNumPreguntas(int numPreguntas) {
        this.numPreguntas = numPreguntas;
    }

    /**
     * @return the numAciertos
     */
    public int getNumAciertos() {
        return numAciertos;
    }

    /**
     * @param numAciertos the numAciertos to set
     */
    public void setNumAciertos(int numAciertos) {
        this.numAciertos = numAciertos;
    }

    /**
     * @return the numErrores
     */
    public int getNumErrores() {
        return numErrores;
    }

    /**
     * @param numErrores the numErrores to set
     */
    public void setNumErrores(int numErrores) {
        this.numErrores = numErrores;
    }

    /**
     * @return the numAciertosDrag
     */
    public int getNumAciertosDrag() {
        return numAciertosDrag;
    }

    /**
     * @param numAciertosDrag the numAciertosDrag to set
     */
    public void setNumAciertosDrag(int numAciertosDrag) {
        this.numAciertosDrag = numAciertosDrag;
    }

    /**
     * @return the numErroresDrag
     */
    public int getNumErroresDrag() {
        return numErroresDrag;
    }

    /**
     * @param numErroresDrag the numErroresDrag to set
     */
    public void setNumErroresDrag(int numErroresDrag) {
        this.numErroresDrag = numErroresDrag;
    }

    /**
     * @return the numAciertosSintaxis
     */
    public int getNumAciertosSintaxis() {
        return numAciertosSintaxis;
    }

    /**
     * @param numAciertosSintaxis the numAciertosSintaxis to set
     */
    public void setNumAciertosSintaxis(int numAciertosSintaxis) {
        this.numAciertosSintaxis = numAciertosSintaxis;
    }

    /**
     * @return the numErroresSintaxis
     */
    public int getNumErroresSintaxis() {
        return numErroresSintaxis;
    }

    /**
     * @param numErroresSintaxis the numErroresSintaxis to set
     */
    public void setNumErroresSintaxis(int numErroresSintaxis) {
        this.numErroresSintaxis = numErroresSintaxis;
    }

    /**
     * @return the numAciertosPreguntas
     */
    public int getNumAciertosPreguntas() {
        return numAciertosPreguntas;
    }

    /**
     * @param numAciertosPreguntas the numAciertosPreguntas to set
     */
    public void setNumAciertosPreguntas(int numAciertosPreguntas) {
        this.numAciertosPreguntas = numAciertosPreguntas;
    }

    /**
     * @return the numErroresPreguntas
     */
    public int getNumErroresPreguntas() {
        return numErroresPreguntas;
    }

    /**
     * @param numErroresPreguntas the numErroresPreguntas to set
     */
    public void setNumErroresPreguntas(int numErroresPreguntas) {
        this.numErroresPreguntas = numErroresPreguntas;
    }
}
